package com.hivekion.common.config;

import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.ResourcePatternResolver;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.io.IOException;

@Configuration
public class ActivitiConfig {
      @Autowired
      private DataSource dataSource;

      @Autowired
      private ResourcePatternResolver resourceLoader;

      /**
       * 初始化配置，将创建28张表
       *
       * @return
       */
      @Bean
      public StandaloneProcessEngineConfiguration processEngineConfiguration() {
	    StandaloneProcessEngineConfiguration configuration =
		    new StandaloneProcessEngineConfiguration();
	    configuration.setDataSource(dataSource);
	    configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
	    configuration.setAsyncExecutorActivate(false);
	    return configuration;
      }

      @Bean
      public ProcessEngine processEngine() {
	    return processEngineConfiguration().buildProcessEngine();
      }

      @Bean
      public RepositoryService repositoryService() {
	    return processEngine().getRepositoryService();
      }

      @Bean
      public RuntimeService runtimeService() {
	    return processEngine().getRuntimeService();
      }

      @Bean
      public TaskService taskService() {
	    return processEngine().getTaskService();
      }

      @Bean
      public HistoryService historyService() {
	    return processEngine().getHistoryService();
      }

      /**
       * 部署流程
       *
       * @throws IOException
       */
      @PostConstruct
      public void initProcess() throws IOException {
	    //        DeploymentBuilder deploymentBuilder= repositoryService().createDeployment();
	    //        deploymentBuilder.enableDuplicateFiltering()
	    //                .addClasspathResource("projectDeclareProcess.bpmn")
	    //                .name("projectDeclareProcess")
	    //                .deploy();
	    //        Resource resource1 = resourceLoader.getResource("classpath:/processes/test.bpmn");
	    // //加载流程图资源文件
	    //        deploymentBuilder.enableDuplicateFiltering()
	    //                .addInputStream(resource1.getFilename(), resource1.getInputStream())
	    //                .name("myProcess_1").deploy(); //按流程id部署
      }
}
